package com.chengqs.n2.util;

import lombok.extern.slf4j.Slf4j;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

@Slf4j(topic = "c.FileReader")
public class FileReader {
    /**
     * 读取指定文件，并记录读取操作的开始和结束时间。
     *
     * @param filename 要读取的文件的路径
     */
    public static void read(String filename) {
        // 找到文件路径中最后一个路径分隔符的位置
        int idx = filename.lastIndexOf(File.separator);
        // 从路径中提取出文件名
        String shortName = filename.substring(idx + 1);
        // 使用 try-with-resources 语句，确保 FileInputStream 在操作完成后自动关闭
        try (FileInputStream in = new FileInputStream(filename)) {
            // 记录读取开始时间
            long start = System.currentTimeMillis();

            log.debug("read [{}] start ...", shortName);
            // 定义缓冲区，大小为 1024 字节
            byte[] buf = new byte[1024];
            int n = -1;

            // 循环读取文件内容，直到读取结束（返回 -1）
            do {
                n = in.read(buf);
            } while (n != -1);

            // 记录读取结束时间
            long end = System.currentTimeMillis();
            // 输出日志信息，记录读取操作结束以及耗时
            log.debug("read [{}] end ... cost: {} ms", shortName, end - start);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}